home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 1999 May / SGI IRIX 6.5 Applications 1999 May.iso / dist / netscape.idb / var / netscape / communicator / conv_alias.z / conv_alias
Text File  |  1999-03-15  |  11KB  |  259 lines

  1. #!/bin/sh
  2.  
  3.  
  4. # This shell script reads $HOME/.zmailrc and converts aliases found to
  5. # an html file understood by Netscape's Address Book (version 2.x and
  6. # above).  If you previously ran Communicator 4.x, you will have to import
  7. # the address-book.html file manually before you will see the MediaMail
  8. # aliases in your Address Book. To import, select Communicator -> Address Book.
  9. # In the Address Book, select File -> Import.  In the Import address book
  10. # File Finder dialog, select $HOME/.netscape/address-book.html.
  11. #
  12. #     07/11/96 A.T. - Created.
  13. #     09/06/96 A.T. - Fixed to correctly parse email addresses in the
  14. #                     format of "john@sgi.com (John Smith)".
  15. #     04/24/98 A.T. - Added DOCTYPE to beginning of address-book.html file;
  16. #                     Communicator expects that to be in the file before
  17. #                     the file can be imported.
  18. #     06/20/98 A.T. - Fixed user lines in list so that user name is included and
  19. #                     email is actual email address instead of nickname.
  20. #                     Fixed list lines so that list name is included.
  21.  
  22.  
  23. PATH=/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/usr/bin/X11
  24. TDIR=/usr/tmp
  25. ZMAILRC=$HOME/.zmailrc
  26. ADDR_BOOK=$HOME/.netscape/address-book.html
  27. ADDR_BOOK_USER=$TDIR/.addr_book_user.$$
  28. ADDR_BOOK_LIST=$TDIR/.addr_book_list.$$
  29. COMM_ADDR_BOOK=$HOME/.netscape/abook.nab
  30. MMAIL_ALIAS=$TDIR/.mmail_alias.$$
  31. MMAIL_LIST=$TDIR/.mmail_list.$$
  32. MMAIL_LIST2=$TDIR/.mmail_list2.$$
  33. NEW_ADDR_BOOK=$TDIR/.new_addr_book.$$
  34. NEW_USER=$TDIR/.new_user.$$
  35. NEW_LIST=$TDIR/.new_list.$$
  36. FINAL=$TDIR/.final.$$
  37.  
  38.  
  39. # If there's no MediaMail .zmailrc file, there's nothing to do.
  40.  
  41. if [ ! -f "$ZMAILRC" ]; then
  42.     echo "$ZMAILRC file does not exist."
  43.     exit
  44. fi
  45.  
  46.  
  47. # Create $HOME/.netscape directory if one doesn't exist.
  48.  
  49. if [ ! -d "$HOME/.netscape" ]; then
  50.     mkdir $HOME/.netscape
  51. fi
  52.  
  53.  
  54. # Backup original address book.
  55. #
  56. # Netscape doesn't automatically assign alias ids to all users and lists.
  57. # Just in case there is a MediaMail alias that should reference existing
  58. # Netscape users/lists, the following will assign alias ids to users and
  59. # lists that don't have one.
  60. #
  61. # Build temporary files of users and lists from address book.
  62.  
  63. if [ -f "${COMM_ADDR_BOOK}" ]; then
  64.     cp ${COMM_ADDR_BOOK} ${COMM_ADDR_BOOK}.$$
  65. fi
  66.  
  67. if [ -f "${ADDR_BOOK}" ]; then
  68.     if [ -f "${ADDR_BOOK}.original" ]; then
  69.         cp ${ADDR_BOOK} ${ADDR_BOOK}.$$
  70.     else
  71.         cp ${ADDR_BOOK} ${ADDR_BOOK}.original
  72.     fi
  73.  
  74.     nawk -F'"' 'BEGIN { AC=10000 }
  75.                { if ( $1 ~ "A HREF"  &&  $3 ~ "NICKNAME" )
  76.                     { AC=AC+1;
  77.                       printf ("%s\"%s\" ALIASID=\"%s\"%s\"%s\"%s\n", $1, $2, AC, $3, $4, $5);
  78.                     }
  79.                 else if ( $1 ~ "H3 "  &&  $0 !~ "ALIASID"  &&  $0 !~ "ALIASOF" )
  80.                     { AC=AC+1;
  81.                       printf ("    <DT><H3 ALIASID=\"%s\" NICKNAME=\"%s\"%s\n", AC, $2, $3);
  82.                     }
  83.                 else
  84.                     print $0;
  85.                }' < $ADDR_BOOK > $NEW_ADDR_BOOK
  86.  
  87.     sed -n 's/.*A HREF="\(.*\)" ALIASID\(.*\) NICKNAME="\(.*\)">\(.*\)<.*/\3\|\4|\1|\2/p' < $NEW_ADDR_BOOK > $ADDR_BOOK_USER
  88.     sed -n 's/.*H3 ALIASID\(.*\) NICKNAME="\(.*\)".*/\2|\1/p' < $NEW_ADDR_BOOK > $ADDR_BOOK_LIST
  89. else
  90.     touch $ADDR_BOOK_USER $ADDR_BOOK_LIST $NEW_ADDR_BOOK
  91. fi
  92.  
  93.  
  94. # Build temporary files of aliases and mailing lists from MediaMail's .zmailrc
  95. # file.
  96.  
  97. sed -n 's/^ *alias *\([^ ]*\) *\(.*\)/\1|\2/p' $ZMAILRC | grep -v "," | tr -d "'" | tr -d '"' > $MMAIL_ALIAS
  98. sed -n 's/^ *alias *\([^ ]*\) *\(.*\)/\1|\2/p' $ZMAILRC | grep "," | tr -d "'" | tr -d '"' > $MMAIL_LIST
  99.  
  100.  
  101. # Process MediaMail users file first.  If user is not already in address book,
  102. # add user to the user temp html file.  If address is a mailing list, skip it
  103. # for now by adding it to the lists file.  Netscape requires that nickname
  104. # contains only lowercase characters, numbers or "_", so there may be a
  105. # slight translation of the alias name.  If the address is in the format
  106. # of "John Smith <john@sgi.com>" or "john@sgi.com (John Smith)", then the
  107. # Name field will be John Smith.  Otherwise, it will be the same as the alias
  108. # name.
  109.  
  110. ALIAS_COUNT=20000
  111. while read LINE
  112. do
  113.     NICKNAME=`echo $LINE | cut -d"|" -f1 | tr '[A-Z]' '[a-z]' | tr "\!@#$%^&\*()-+={}\[\]|\:;<>,.?/ " "[_*]"`
  114.     NAME="$NICKNAME"
  115.     ADDR=`echo $LINE | cut -d"|" -f2`
  116.     if [ -z "`grep \"^${NICKNAME}\|\" $ADDR_BOOK_USER`" ]; then
  117.         if [ -z "`grep \"^${ADDR}\|\" $ADDR_BOOK_LIST $MMAIL_LIST`" ]; then
  118.             ALIAS_COUNT=`expr $ALIAS_COUNT + 1`
  119.             if [ -n "`echo $ADDR | grep '<'`" ]; then
  120.                 NAME=`echo $ADDR | sed -n 's/\(.*\) <\(.*\)>/\1/p'`
  121.                 ADDR=`echo $ADDR | sed -n 's/\(.*\) <\(.*\)>/\2/p'`
  122.                 if [ -z "$NAME" ]; then
  123.                     NAME="$NICKNAME"
  124.                 fi
  125.             elif [ -n "`echo $ADDR | grep '('`" ]; then
  126.                 NAME=`echo $ADDR | sed -n 's/\(.*\) (\(.*\))/\2/p'`
  127.                 ADDR=`echo $ADDR | sed -n 's/\(.*\) (\(.*\))/\1/p'`
  128.                 if [ -z "$NAME" ]; then
  129.                     NAME="$NICKNAME"
  130.                 fi
  131.             fi
  132.             echo "    <DT><A HREF=\"mailto:${ADDR}\" ALIASID=\"$ALIAS_COUNT\" NICKNAME=\"$NICKNAME\">$NAME</A>" >> $NEW_USER
  133.             echo "$NICKNAME|$NAME|mailto:$ADDR|=\"$ALIAS_COUNT\"" >> $ADDR_BOOK_USER
  134.         else
  135.             echo $LINE >> $MMAIL_LIST
  136.         fi
  137.     else
  138.         echo "Alias $NICKNAME not added because it exists in the Address Book already."
  139.     fi
  140. done < $MMAIL_ALIAS
  141.  
  142.  
  143. # Assign alias ids to the MediaMail lists file. Have to do this first because
  144. # lists can reference other lists.
  145.  
  146. nawk 'BEGIN { AC=30000 }
  147.      { AC=AC+1;
  148.        printf ("%s|=\"%s\"\n", $0, AC);
  149.      }' < $MMAIL_LIST > $MMAIL_LIST2
  150.  
  151.  
  152. # Process MediaMail lists file now.  If list is not already in address book,
  153. # get the alias id for the list and add list to the list temp html file.
  154. # For each address in the list, determine whether it is a user or list.
  155. # If user/list is not already in address book, add user/list to the appropriate
  156. # temp html file.  If user/list is in the address book, find its alias id
  157. # and reference it in the list temp html file.
  158.  
  159. echo "    <DT><H3></H3>" > $NEW_LIST
  160. echo "    <DL><p>" >> $NEW_LIST
  161. echo "    </DL><p>" >> $NEW_LIST
  162.  
  163. ALIAS_COUNT=40000
  164. while read LINE
  165. do
  166.     ORIG_NICKNAME=`echo $LINE | cut -d"|" -f1`
  167.     NICKNAME=`echo $LINE | cut -d"|" -f1 | tr '[A-Z]' '[a-z]' | tr "\!@#$%^&\*()-+={}\[\]|\:;<>,.?/ " "[_*]"`
  168.  
  169.     if [ -z "`grep \"^${NICKNAME}\|\" $ADDR_BOOK_LIST`" ]; then
  170.         ALIASID=`grep "^${ORIG_NICKNAME}\|" $MMAIL_LIST2 | cut -d"|" -f3`
  171.         echo "    <DT><H3 ALIASID$ALIASID NICKNAME=\"$NICKNAME\">$NICKNAME</H3>" >> $NEW_LIST
  172.         echo "    <DL><p>" >> $NEW_LIST
  173.         echo "$NICKNAME|$ALIASID" >> $ADDR_BOOK_LIST
  174.  
  175.         NBR_ADDR=`echo $LINE | awk -F, '{print NF}'`
  176.         ALL_ADDR=`echo $LINE | cut -d"|" -f2`
  177.  
  178.         ADDR_INDEX=1
  179.         while [ $ADDR_INDEX -le $NBR_ADDR ]
  180.         do
  181.             ADDR=`echo $ALL_ADDR | cut -d, -f$ADDR_INDEX`
  182.             ADDR=`echo $ADDR`
  183.             NAME=""
  184.  
  185.             if [ -n "`echo $ADDR | grep '<'`" ]; then
  186.                 NAME=`echo $ADDR | sed -n 's/\(.*\) <\(.*\)>/\1/p'`
  187.                 ADDR=`echo $ADDR | sed -n 's/\(.*\) <\(.*\)>/\2/p'`
  188.             elif [ -n "`echo $ADDR | grep '('`" ]; then
  189.                 NAME=`echo $ADDR | sed -n 's/\(.*\) (\(.*\))/\2/p'`
  190.                 ADDR=`echo $ADDR | sed -n 's/\(.*\) (\(.*\))/\1/p'`
  191.             fi
  192.  
  193.             if [ -n "$NAME" ]; then
  194.                 NNAME=`echo $NAME | tr '[A-Z]' '[a-z]' | tr "\!@#$%^&\*()-+={}\[\]|\:;<>,.?/ " "[_*]"`
  195.             else
  196.                 NAME="$ADDR"
  197.                 NNAME=`echo $ADDR | tr '[A-Z]' '[a-z]' | tr "\!@#$%^&\*()-+={}\[\]|\:;<>,.?/ " "[_*]"`
  198.             fi
  199.  
  200.             if [ -z "`grep \"^${NNAME}\|\" $ADDR_BOOK_USER`" ]; then
  201.                 if [ -z "`grep \"^${NNAME}\|\" $ADDR_BOOK_LIST`"  -a  -z "`grep \"^${NAME}\|\" $MMAIL_LIST2`" ]; then
  202.                     USER_ENT=`grep "mailto:${ADDR}\|" $ADDR_BOOK_USER`
  203.                     if [ -z "$USER_ENT" ]; then
  204.                         ALIAS_COUNT=`expr $ALIAS_COUNT + 1`
  205.                         echo "    <DT><A HREF=\"mailto:${ADDR}\" ALIASID=\"$ALIAS_COUNT\" NICKNAME=\"$NNAME\">$NAME</A>" >> $NEW_USER
  206.                         echo "$NNAME|$NAME|mailto:$ADDR|=\"$ALIAS_COUNT\"" >> $ADDR_BOOK_USER
  207.                         ALIASOF="=\"$ALIAS_COUNT\""
  208.                         echo "        <DT><A HREF=\"mailto:${ADDR}\" ALIASOF${ALIASOF}>$NAME</A>" >> $NEW_LIST
  209.                     else
  210.                         NAME=`echo $USER_ENT | cut -d"|" -f2`
  211.                         ADDR=`echo $USER_ENT | cut -d"|" -f3 | sed 's/mailto://'`
  212.                         ALIASOF=`echo $USER_ENT | cut -d"|" -f4`
  213.                         echo "        <DT><A HREF=\"mailto:${ADDR}\" ALIASOF${ALIASOF}>$NAME</A>" >> $NEW_LIST
  214.                     fi
  215.                 else
  216.                     ALIASOF=`grep "^${NNAME}\|" $ADDR_BOOK_LIST | cut -d"|" -f2`
  217.                     if [ -z "$ALIASOF" ]; then
  218.                         ALIASOF=`grep "^${NNAME}\|" $MMAIL_LIST2 | cut -d"|" -f3`
  219.                     fi
  220.                     echo "        <DT><H3 ALIASOF${ALIASOF}>$NNAME</H3>" >> $NEW_LIST
  221.                 fi
  222.             else
  223.                 USER_ENT=`grep "^${NNAME}\|" $ADDR_BOOK_USER`
  224.                 NAME=`echo $USER_ENT | cut -d"|" -f2`
  225.                 ADDR=`echo $USER_ENT | cut -d"|" -f3 | sed 's/mailto://'`
  226.                 ALIASOF=`echo $USER_ENT | cut -d"|" -f4`
  227.                 echo "        <DT><A HREF=\"mailto:${ADDR}\" ALIASOF${ALIASOF}>$NAME</A>" >> $NEW_LIST
  228.             fi
  229.  
  230.             ADDR_INDEX=`expr $ADDR_INDEX + 1`
  231.         done
  232.  
  233.         echo "    </DL><p>" >> $NEW_LIST
  234.     else
  235.         echo "Alias $NICKNAME not added because it exists in the Address Book already."
  236.     fi
  237. done < $MMAIL_LIST
  238.  
  239.  
  240. # Concatenate the new user and new list files to address book.
  241.  
  242. echo '<!DOCTYPE NETSCAPE-Addressbook-file-1>' > $FINAL
  243. cat $NEW_ADDR_BOOK >> $FINAL
  244. echo "<DL><p>" >> $FINAL
  245. cat $NEW_USER $NEW_LIST 2>/dev/null >> $FINAL
  246. echo "</DL><p>" >> $FINAL
  247. cp $FINAL $ADDR_BOOK
  248.  
  249.  
  250. # Clean up.
  251.  
  252. rm -f $ADDR_BOOK_USER $ADDR_BOOK_LIST $MMAIL_ALIAS $MMAIL_LIST $MMAIL_LIST2 $NEW_ADDR_BOOK $NEW_USER $NEW_LIST $FINAL 2>/dev/null
  253.  
  254. if [ -f "$COMM_ADDR_BOOK" ]; then
  255.     echo "\nImport file for alias conversion completed.  To complete the alias\nconversion process, please bring up Address Book in Communicator\nand import $HOME/.netscape/address-book.html by using the\nFile pulldown and selecting Import.\n"
  256. else
  257.     echo "\nAlias conversion completed.\n"
  258. fi
  259.